# -*- coding: UTF-8 -*-
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr

import smtplib

class SendMail:
    cfg_dic = ''
    my_sender = ''  # 发件人邮箱账号
    my_pass = ''  # 生产的授权码
    my_user = ''  # 收件人邮箱账号，我这边发送给自己
    def __init__(self,config):
        cfg_dic = config
        self.my_sender = cfg_dic['发件邮箱']  # 发件人邮箱账号
        self.my_pass = cfg_dic['发件邮箱授权码']   # 生产的授权码
        self.my_user = cfg_dic['收件邮箱']   # 收件人邮箱账号，我这边发送给自己

    # 发送文字
    def mail(self,dataStr):
        ret = True
        try:
            msg = MIMEText(dataStr, 'plain', 'utf-8')
            msg['From'] = formataddr(["研招网爬虫", self.my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["FK", self.my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "考研成绩查询结果通知"  # 邮件的主题，也可以说是标题

            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器，端口是25
            server.login(self.my_sender, self.my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(self.my_sender, [self.my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:  # 如果 try 中的语句没有执行，则会执行下面的 ret=False
            ret = False
        return ret

    # 发送附件
    def file(self):
        ret = True
        try:
            msg = MIMEMultipart()
            msg['From'] = formataddr(["研招网初始成绩爬虫", self.my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["FK", self.my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "考研成绩查询结果通知"  # 邮件的主题，也可以说是标题

            # 构造附件1，传送当前目录下的 test.txt 文件
            att1 = MIMEText(open('result.html', 'rb').read(), 'base64', 'utf-8')
            att1["Content-Type"] = 'application/octet-stream'
            # 这里的filename可以任意写，写什么名字，邮件中显示什么名字
            att1["Content-Disposition"] = 'attachment; filename="result.html"'
            msg.attach(att1)

            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器，端口是25
            server.login(self.my_sender, self.my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(self.my_sender, [self.my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception as e:  # 如果 try 中的语句没有执行，则会执行下面的 ret=False
            print(e)
            ret = False
        return ret

        # 发送picture
    def picture(self):
        ret = True
        try:
            msg = MIMEMultipart('related')
            msg['From'] = formataddr(["研招网爬虫", self.my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["FK", self.my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "考研成绩查询结果通知"  # 邮件的主题，也可以说是标题

            msgAlternative = MIMEMultipart('alternative')
            msg.attach(msgAlternative)

            mail_msg = '<p>考研成绩</p><p><a href="https://yz.chsi.com.cn/apply/cjcx/">研招网</a></p><p></p><p><img src="cid:image1"></p>'
            msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

            # 指定图片为当前目录
            fp = open('./img/result.png', 'rb')
            msgImage = MIMEImage(fp.read())
            fp.close()

            # 定义图片 ID，在 HTML 文本中引用
            msgImage.add_header('Content-ID', '<image1>')
            msg.attach(msgImage)

            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器，端口是25
            server.login(self.my_sender, self.my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(self.my_sender, [self.my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception as e:  # 如果 try 中的语句没有执行，则会执行下面的 ret=False
            print(e)
            ret = False
        return ret



    def send_Email(self):
        ret = self.picture()
        if ret:
            print("邮件发送成功")
        else:
            print("邮件发送失败")
        return ret




